package 算法.test;

import java.util.Random;

/**
 * 冒泡排序
 * 
 * @author mantou
 *
 */
public class Bubble {
	/**
	 * 排序算法
	 * 
	 * @param array
	 *            待排序的数组
	 * @param sortMode
	 *            1：从大到小 ，2：从小到大
	 * @return
	 */
	public static int[] sort(int[] array, int sortMode) {
		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j < array.length; j++) {
				if (sortMode == 1)
					if (array[i] > array[j]) {
						int data = array[i];
						array[i] = array[j];
						array[j] = data;
					}
				if (sortMode == 2)
					if (array[i] < array[j]) {
						int data = array[i];
						array[i] = array[j];
						array[j] = data;
					}
			}
		}
		return array;
	}

	public static String getArrayStr(int[] array) {
		String str = "";
		for (int i = 0; i < array.length; i++) {
			str += array[i] + " ";
		}
		return str;
	}

	public static int[] sort(int[] array) {
		// 这里for循环表示总共需要比较多少轮
		for (int i = 1; i < array.length; i++) {
			// 设定一个标记，若为true，则表示此次循环没有进行交换，也就是待排序列已经有序，排序已经完成。
			boolean flag = true;
			// 这里for循环表示每轮比较参与的元素下标
			// 对当前无序区间array[0......length-i]进行排序
			// j的范围很关键，这个范围是在逐步缩小的,因为每轮比较都会将最大的放在右边
			for (int j = 0; j < array.length - i; j++) {
				if (array[j] > array[j + 1]) {
					int temp = array[j];
					array[j] = array[j + 1];
					array[j + 1] = temp;
					flag = false;
				}
			}
			if (flag) {
				break;
			}

		}
		return array;
	}

	public static void main(String[] args) {
		int arrayCount = 10000;
		int[] array = new int[arrayCount];
		long average = 0;
		int m = 0;
		int forCount = 10;
		while (m < forCount) {
			for (int i = 0; i < array.length; i++) {
				array[i] = new Random().nextInt(arrayCount);
			}
			System.out.println("排序前-->" + getArrayStr(array));
			long startTime = System.currentTimeMillis();
			sort(array);
			long endTime = System.currentTimeMillis();
			System.out.println("排序后-->" + getArrayStr(array));
			System.out.println("排序时间-->" + (endTime - startTime) + "ms");
			average += (endTime - startTime);
			m++;
		}
		System.out.println("平均耗时->" + (average / m) + "ms");
	}
}
